package com.itextpdf.text.pdf; import com.itextpdf.testutils.CompareTool; import com.itextpdf.text.*; import static com.itextpdf.text.pdf.PdfA1CheckerTest.pdfObjectCheck; import junit.framework.Assert; import org.junit.Test; import java.io.*; import java.util.ArrayList; public class PdfA2CheckerTest { private static final String outputDir = "./target/test/PdfA2/"; static { new File(outputDir).mkdirs(); } @Test public void metadaCheckTest() throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(outputDir + "metadaPDFA2CheckTest1.pdf"); Document document = new Document(); PdfWriter writer = PdfAWriter.getInstance(document, fos, PdfAConformanceLevel.PDF_A_2B); document.open(); PdfContentByte canvas = writer.getDirectContent(); canvas.setColorFill(BaseColor.LIGHT_GRAY); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.lineTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.fill(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException exc) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown on unknown blend mode."); } @Test public void transparencyCheckTest1() throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(outputDir + "pdfa2TransparencyCheckTest1.pdf"); Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, fos, PdfAConformanceLevel.PDF_A_2A); document.open(); PdfContentByte canvas = writer.getDirectContent(); canvas.saveState(); PdfGState gs = new PdfGState(); gs.setBlendMode(PdfGState.BM_DARKEN); canvas.setGState(gs); canvas.rectangle(100, 100, 100, 100); canvas.fill(); canvas.restoreState(); canvas.saveState(); gs = new PdfGState(); gs.setBlendMode(new PdfName("Lighten")); canvas.setGState(gs); canvas.rectangle(200, 200, 100, 100); canvas.fill(); canvas.restoreState(); boolean conformanceExceptionThrown = false; try { canvas.saveState(); gs = new PdfGState(); gs.setBlendMode(new PdfName("UnknownBM")); canvas.setGState(gs); canvas.rectangle(300, 300, 100, 100); canvas.fill(); canvas.restoreState(); document.close(); } catch (PdfAConformanceException pdface) { conformanceExceptionThrown = true; } if (!conformanceExceptionThrown) Assert.fail("PdfAConformance exception should be thrown on unknown blend mode."); } @Test public void transparencyCheckTest2() { Document document = new Document(); try { // step 2 PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2TransperancyCheckTest2.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); // step 3 document.open(); PdfDictionary sec = new PdfDictionary(); sec.put(PdfName.GAMMA, new PdfArray(new float[]{2.2f,2.2f,2.2f})); sec.put(PdfName.MATRIX, new PdfArray(new float[]{0.4124f,0.2126f,0.0193f,0.3576f,0.7152f,0.1192f,0.1805f,0.0722f,0.9505f})); sec.put(PdfName.WHITEPOINT, new PdfArray(new float[]{0.9505f,1f,1.089f})); PdfArray arr = new PdfArray(PdfName.CALRGB); arr.add(sec); writer.setDefaultColorspace(PdfName.DEFAULTRGB, writer.addToBody(arr).getIndirectReference()); // step 4 PdfContentByte cb = writer.getDirectContent(); float gap = (document.getPageSize().getWidth() - 400) / 3; pictureBackdrop(gap, 500f, cb); pictureBackdrop(200 + 2 * gap, 500, cb); pictureBackdrop(gap, 500 - 200 - gap, cb); pictureBackdrop(200 + 2 * gap, 500 - 200 - gap, cb); pictureCircles(gap, 500, cb); cb.saveState(); PdfGState gs1 = new PdfGState(); gs1.setFillOpacity(0.5f); cb.setGState(gs1); pictureCircles(200 + 2 * gap, 500, cb); cb.restoreState(); cb.saveState(); PdfTemplate tp = cb.createTemplate(200, 200); PdfTransparencyGroup group = new PdfTransparencyGroup(); tp.setGroup(group); pictureCircles(0, 0, tp); cb.setGState(gs1); cb.addTemplate(tp, gap, 500 - 200 - gap); cb.restoreState(); cb.saveState(); tp = cb.createTemplate(200, 200); tp.setGroup(group); PdfGState gs2 = new PdfGState(); gs2.setFillOpacity(0.5f); gs2.setBlendMode(PdfGState.BM_HARDLIGHT); tp.setGState(gs2); pictureCircles(0, 0, tp); cb.addTemplate(tp, 200 + 2 * gap, 500 - 200 - gap); cb.restoreState(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, true); font.setColor(BaseColor.BLACK); cb.resetRGBColorFill(); ColumnText ct = new ColumnText(cb); Phrase ph = new Phrase("Ungrouped objects\nObject opacity = 1.0", font); ct.setSimpleColumn(ph, gap, 0, gap + 200, 500, 18, Element.ALIGN_CENTER); ct.go(); ph = new Phrase("Ungrouped objects\nObject opacity = 0.5", font); ct.setSimpleColumn(ph, 200 + 2 * gap, 0, 200 + 2 * gap + 200, 500, 18, Element.ALIGN_CENTER); ct.go(); ph = new Phrase("Transparency group\nObject opacity = 1.0\nGroup opacity = 0.5\nBlend mode = Normal", font); ct.setSimpleColumn(ph, gap, 0, gap + 200, 500 - 200 - gap, 18, Element.ALIGN_CENTER); ct.go(); ph = new Phrase("Transparency group\nObject opacity = 0.5\nGroup opacity = 1.0\nBlend mode = HardLight", font); ct.setSimpleColumn(ph, 200 + 2 * gap, 0, 200 + 2 * gap + 200, 500 - 200 - gap, 18, Element.ALIGN_CENTER); ct.go(); //ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); //writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } boolean conformanceExceptionThrown = false; try { document.close(); } catch (PdfAConformanceException pdface) { conformanceExceptionThrown = true; } if (!conformanceExceptionThrown) Assert.fail("PdfAConformance exception should be thrown on unknown blend mode."); } @Test public void transparencyCheckTest3() { Document document = new Document(); try { // step 2 PdfAWriter writer = PdfAWriter.getInstance( document, new FileOutputStream(outputDir + "pdfa2TransperancyCheckTest3.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); // step 3 document.open(); PdfDictionary sec = new PdfDictionary(); sec.put(PdfName.GAMMA, new PdfArray(new float[]{2.2f,2.2f,2.2f})); sec.put(PdfName.MATRIX, new PdfArray(new float[]{0.4124f,0.2126f,0.0193f,0.3576f,0.7152f,0.1192f,0.1805f,0.0722f,0.9505f})); sec.put(PdfName.WHITEPOINT, new PdfArray(new float[]{0.9505f,1f,1.089f})); PdfArray arr = new PdfArray(PdfName.CALRGB); arr.add(sec); writer.setDefaultColorspace(PdfName.DEFAULTRGB, writer.addToBody(arr).getIndirectReference()); // step 4 PdfContentByte cb = writer.getDirectContent(); float gap = (document.getPageSize().getWidth() - 400) / 3; pictureBackdrop(gap, 500, cb, writer); pictureBackdrop(200 + 2 * gap, 500, cb, writer); pictureBackdrop(gap, 500 - 200 - gap, cb, writer); pictureBackdrop(200 + 2 * gap, 500 - 200 - gap, cb, writer); PdfTemplate tp; PdfTransparencyGroup group; tp = cb.createTemplate(200, 200); pictureCircles(0, 0, tp, writer); group = new PdfTransparencyGroup(); group.setIsolated(true); group.setKnockout(true); tp.setGroup(group); cb.addTemplate(tp, gap, 500); tp = cb.createTemplate(200, 200); pictureCircles(0, 0, tp, writer); group = new PdfTransparencyGroup(); group.setIsolated(true); group.setKnockout(false); tp.setGroup(group); cb.addTemplate(tp, 200 + 2 * gap, 500); tp = cb.createTemplate(200, 200); pictureCircles(0, 0, tp, writer); group = new PdfTransparencyGroup(); group.setIsolated(false); group.setKnockout(true); tp.setGroup(group); cb.addTemplate(tp, gap, 500 - 200 - gap); tp = cb.createTemplate(200, 200); pictureCircles(0, 0, tp, writer); group = new PdfTransparencyGroup(); group.setIsolated(false); group.setKnockout(false); tp.setGroup(group); cb.addTemplate(tp, 200 + 2 * gap, 500 - 200 - gap); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } boolean conformanceException = false; try { document.close(); } catch (PdfAConformanceException pdface) { conformanceException = true; } if (!conformanceException) Assert.fail("PdfAConformance exception should be thrown on unknown blend mode."); } @Test public void transparencyCheckTest4() throws DocumentException, IOException { // step 1 Document document = new Document(new Rectangle(850, 600)); // step 2 PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2TransperancyCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); // step 3 document.open(); // step 4 PdfContentByte canvas = writer.getDirectContent(); // add the clipped image Image img = Image.getInstance("./src/test/resources/com/itextpdf/text/pdf/img/bruno_ingeborg.jpg"); float w = img.getScaledWidth(); float h = img.getScaledHeight(); canvas.ellipse(1, 1, 848, 598); canvas.clip(); canvas.newPath(); canvas.addImage(img, w, 0, 0, h, 0, -600); // Create a transparent PdfTemplate PdfTemplate t2 = writer.getDirectContent().createTemplate(850, 600); PdfTransparencyGroup transGroup = new PdfTransparencyGroup(); transGroup.put(PdfName.CS, PdfName.DEVICEGRAY); transGroup.setIsolated(true); transGroup.setKnockout(false); t2.setGroup(transGroup); // Add transparent ellipses to the template int gradationStep = 30; float[] gradationRatioList = new float[gradationStep]; for(int i = 0; i < gradationStep; i++) { gradationRatioList[i] = 1 - (float)Math.sin(Math.toRadians(90.0f / gradationStep * (i + 1))); } for(int i = 1; i < gradationStep + 1; i++) { t2.setLineWidth(5 * (gradationStep + 1 - i)); t2.setGrayStroke(gradationRatioList[gradationStep - i]); t2.ellipse(0, 0, 850, 600); t2.stroke(); } // Create an image mask for the direct content PdfDictionary maskDict = new PdfDictionary(); maskDict.put(PdfName.TYPE, PdfName.MASK ); maskDict.put(PdfName.S, new PdfName("Luminosity")); maskDict.put(new PdfName("G"), t2.getIndirectReference()); PdfGState gState = new PdfGState(); gState.put(PdfName.SMASK, maskDict ); canvas.setGState(gState); canvas.addTemplate(t2, 0, 0); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); // step 5 document.close(); } @Test public void imageCheckTest1() throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(outputDir + "imageCheckTest1.pdf"); Document document = new Document(); PdfWriter writer = PdfAWriter.getInstance(document, fos, PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); String[] pdfaErrors = new String[9]; for (int i = 1; i <= 9; i++) { try { Image img = Image.getInstance(String.format("./src/test/resources/com/itextpdf/text/pdf/jpeg2000/file%s.jp2", Integer.toString(i))); document.add(img); document.newPage(); } catch (Exception e) { pdfaErrors[i - 1] = e.getLocalizedMessage(); } } Assert.assertEquals(null, pdfaErrors[0]); Assert.assertEquals(null, pdfaErrors[1]); Assert.assertEquals(null, pdfaErrors[2]); Assert.assertEquals(null, pdfaErrors[3]); Assert.assertEquals(true, pdfaErrors[4].contains("0x01")); Assert.assertEquals(null, pdfaErrors[5]); Assert.assertEquals(true, pdfaErrors[6].contains("0x01")); Assert.assertEquals(null, pdfaErrors[7]); Assert.assertEquals(null, pdfaErrors[8]); document.close(); } @Test public void imageCheckTest2() throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(outputDir + "imageCheckTest2.pdf"); Document document = new Document(); PdfWriter writer = PdfAWriter.getInstance(document, fos, PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); ArrayList<String> pdfaErrors = new ArrayList<String>(); try { Image img = Image.getInstance("./src/test/resources/com/itextpdf/text/pdf/jpeg2000/p0_01.j2k"); document.add(img); document.newPage(); } catch (Exception e) { pdfaErrors.add(e.getLocalizedMessage()); } try { Image img = Image.getInstance("./src/test/resources/com/itextpdf/text/pdf/jpeg2000/p0_02.j2k"); document.add(img); } catch (Exception e) { pdfaErrors.add(e.getLocalizedMessage()); } try { Image img = Image.getInstance("./src/test/resources/com/itextpdf/text/pdf/jpeg2000/p1_01.j2k"); document.add(img); } catch (Exception e) { pdfaErrors.add(e.getLocalizedMessage()); } try { Image img = Image.getInstance("./src/test/resources/com/itextpdf/text/pdf/jpeg2000/p1_02.j2k"); document.add(img); } catch (Exception e) { pdfaErrors.add(e.getLocalizedMessage()); } Assert.assertEquals(4, pdfaErrors.size()); for (int i = 0; i < 4; i++) { Assert.assertEquals(true, pdfaErrors.get(i).contains("JPX")); } document.close(); } @Test public void layerCheckTest1() throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(outputDir + "layerCheckTest1.pdf"); Document document = new Document(); PdfWriter writer = PdfAWriter.getInstance(document, fos, PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); writer.setViewerPreferences(PdfWriter.PageModeUseOC); writer.setPdfVersion(PdfWriter.VERSION_1_5); document.open(); PdfLayer layer = new PdfLayer("Do you see me?", writer); layer.setOn(true); BaseFont bf = BaseFont.createFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, true); PdfContentByte cb = writer.getDirectContent(); cb.beginText(); cb.setFontAndSize(bf, 18); cb.showTextAligned(Element.ALIGN_LEFT, "Do you see me?", 50, 790, 0); cb.beginLayer(layer); cb.showTextAligned(Element.ALIGN_LEFT, "Peek-a-Boo!!!", 50, 766, 0); cb.endLayer(); cb.endText(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } @Test public void layerCheckTest2() throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(outputDir + "layerCheckTest2.pdf"); Document document = new Document(); PdfWriter writer = PdfAWriter.getInstance(document, fos, PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); writer.setViewerPreferences(PdfWriter.PageModeUseOC); writer.setPdfVersion(PdfWriter.VERSION_1_5); document.open(); PdfContentByte cb = writer.getDirectContent(); PdfLayer nested = new PdfLayer("Nested layers", writer); PdfLayer nested_1 = new PdfLayer("Nested layer 1", writer); PdfLayer nested_2 = new PdfLayer("Nested layer 2", writer); nested.addChild(nested_1); nested.addChild(nested_2); writer.lockLayer(nested_2); cb.beginLayer(nested); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, true); ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase("nested layers", font), 50, 775, 0); cb.endLayer(); cb.beginLayer(nested_1); ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase("nested layer 1", font), 100, 800, 0); cb.endLayer(); cb.beginLayer(nested_2); ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase("nested layer 2", font), 100, 750, 0); cb.endLayer(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } @Test public void egsCheckTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2egsCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); PdfContentByte canvas = writer.getDirectContent(); PdfGState gs = new PdfGState(); gs.put(PdfName.TR, new PdfName("Test")); gs.put(PdfName.HTP, new PdfName("Test")); canvas.saveState(); canvas.setGState(gs); canvas.restoreState(); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.fill(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == gs) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void egsCheckTest2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "egsCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_2A); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); PdfContentByte canvas = writer.getDirectContent(); PdfGState gs = new PdfGState(); PdfDictionary dict = new PdfDictionary(); dict.put(PdfName.HALFTONETYPE, new PdfNumber(6)); gs.put(PdfName.HT, dict); canvas.setGState(gs); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void egsCheckTest3() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "egsCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_2A); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); PdfContentByte canvas = writer.getDirectContent(); PdfGState gs = new PdfGState(); PdfDictionary dict = new PdfDictionary(); dict.put(PdfName.HALFTONETYPE, new PdfNumber(5)); dict.put(PdfName.HALFTONENAME, new PdfName("Test")); gs.put(PdfName.HT, dict); canvas.setGState(gs); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void egsCheckTest4() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2egsCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); PdfContentByte canvas = writer.getDirectContent(); PdfGState gs = new PdfGState(); gs.put(PdfName.TR2, new PdfName("Test")); gs.put(PdfName.HTP, new PdfName("Test")); canvas.saveState(); canvas.setGState(gs); canvas.restoreState(); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.fill(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == gs) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void canvasCheckTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "canvasCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_1B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfContentByte canvas = writer.getDirectContent(); boolean exceptionThrown = false; try { for (int i = 0; i < 29; i++) { canvas.saveState(); } } catch (PdfAConformanceException e) { if ("q".equals(e.getObject())) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); for (int i = 0; i < 28; i++) { canvas.restoreState(); } document.close(); } @Test public void canvasCheckTest2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "canvasCheckTestt2.pdf"), PdfAConformanceLevel.PDF_A_1B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfContentByte canvas = writer.getDirectContent(); for (int i = 0; i < 28; i++) { canvas.saveState(); } for (int i = 0; i < 28; i++) { canvas.restoreState(); } document.close(); } @Test public void pdfObjectCheckTest() throws DocumentException, IOException { PdfA1CheckerTest.pdfObjectCheck(outputDir + "pdfObjectCheckTest.pdf", PdfAConformanceLevel.PDF_A_2B, false); } @Test public void annotationCheckTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, new PdfName("Movie")); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getLocalizedMessage().equals("Annotation type /Movie not allowed.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException with correct message should be thrown."); } @Test public void annotationCheckTest2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest2.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getLocalizedMessage().equals("Annotation type null not allowed.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException with correct message should be thrown."); } @Test public void annotationCheckTest2_1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest2_1.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.POPUP); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); document.close(); } @Test public void annotationCheckTest2_2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest2_2.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 200, 100, 200)); annot.put(PdfName.SUBTYPE, PdfName.WIDGET); annot.put(PdfName.CONTENTS, new PdfDictionary()); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); document.close(); } @Test public void annotationCheckTest2_3() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest2_3.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.WIDGET); annot.put(PdfName.CONTENTS, new PdfDictionary()); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getLocalizedMessage() .equals("Every annotation shall have at least one appearance dictionary")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException with correct message should be thrown."); } @Test public void annotationCheckTest3() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest3.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.TEXT); annot.put(PdfName.F, new PdfNumber(0)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getMessage() .equals("The F key's Print flag bit shall be set to 1 and its Hidden, Invisible, NoView and ToggleNoView flag bits shall be set to 0.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException with correct message should be thrown."); } @Test public void annotationCheckTest4() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.TEXT); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT & PdfAnnotation.FLAGS_INVISIBLE)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getMessage() .equals("The F key's Print flag bit shall be set to 1 and its Hidden, Invisible, NoView and ToggleNoView flag bits shall be set to 0.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void annotationCheckTest5() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest5.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); annot.put(PdfName.SUBTYPE, PdfName.WIDGET); annot.put(PdfName.CONTENTS, new PdfDictionary()); PdfDictionary ap = new PdfDictionary(); PdfStream s = new PdfStream("Hello World".getBytes()); ap.put(PdfName.D, new PdfDictionary()); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); annot.put(PdfName.AP, ap); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getMessage() .equals("Appearance dictionary shall contain only the N key with stream value.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void annotationCheckTest6() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest6.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); annot.put(PdfName.SUBTYPE, PdfName.WIDGET); annot.put(PdfName.CONTENTS, new PdfDictionary()); annot.put(PdfName.FT, new PdfName("Btn")); PdfDictionary ap = new PdfDictionary(); PdfStream s = new PdfStream("Hello World".getBytes()); //PdfDictionary s = new PdfDictionary(); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); annot.put(PdfName.AP, ap); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getMessage() .equals("Appearance dictionary of Widget subtype and Btn field type shall contain only the n key with dictionary value")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void annotationCheckTest7() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest7.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); annot.put(PdfName.SUBTYPE, PdfName.WIDGET); annot.put(PdfName.CONTENTS, new PdfDictionary()); PdfDictionary ap = new PdfDictionary(); //PdfStream s = new PdfStream("Hello World".getBytes()); PdfDictionary s = new PdfDictionary(); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); annot.put(PdfName.AP, ap); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getMessage() .equals("Appearance dictionary shall contain only the N key with stream value.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void annotationCheckTest8() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest8.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); annot.put(PdfName.SUBTYPE, PdfName.WIDGET); annot.put(PdfName.CONTENTS, new PdfDictionary()); PdfDictionary ap = new PdfDictionary(); PdfStream s = new PdfStream("Hello World".getBytes()); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); annot.put(PdfName.AP, ap); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); document.close(); } @Test public void annotationCheckTest9() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest9.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.TEXT); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT | PdfAnnotation.FLAGS_NOZOOM | PdfAnnotation.FLAGS_NOROTATE)); PdfDictionary ap = new PdfDictionary(); PdfStream s = new PdfStream("Hello World".getBytes()); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); annot.put(PdfName.AP, ap); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); document.close(); } @Test public void annotationCheckTest10() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest10.pdf"), PdfAConformanceLevel.PDF_A_2A); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.STAMP); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { if (e.getObject() == annot && e.getLocalizedMessage() .equals("Annotation of type /Stamp should have Contents key.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void annotationCheckTest11() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest11.pdf"), PdfAConformanceLevel.PDF_A_2A); writer.createXmpMetadata(); writer.setTagged(); document.open(); document.addLanguage("en-US"); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 200, 200)); annot.put(PdfName.SUBTYPE, PdfName.STAMP); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); annot.put(PdfName.CONTENTS, new PdfString("Hello World")); PdfDictionary ap = new PdfDictionary(); PdfStream s = new PdfStream("Hello World".getBytes()); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); annot.put(PdfName.AP, ap); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); document.close(); } @Test public void annotationCheckTest12() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "annotationCheckTest12.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfDictionary ap = new PdfDictionary(); PdfStream s = new PdfStream("Hello World".getBytes()); ap.put(PdfName.N, writer.addToBody(s).getIndirectReference()); PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(100, 100, 120, 120)); annot.put(PdfName.AP, ap); annot.put(PdfName.SUBTYPE, PdfName.POLYGON); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); PdfContentByte canvas = writer.getDirectContent(); canvas.addAnnotation(annot); annot = new PdfAnnotation(writer, new Rectangle(130, 130, 150, 150)); annot.put(PdfName.SUBTYPE, PdfName.POLYLINE); annot.put(PdfName.AP, ap); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); canvas.addAnnotation(annot); annot = new PdfAnnotation(writer, new Rectangle(160, 160, 180, 180)); annot.put(PdfName.SUBTYPE, PdfName.CARET); annot.put(PdfName.AP, ap); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); canvas.addAnnotation(annot); annot = new PdfAnnotation(writer, new Rectangle(190, 190, 210, 210)); annot.put(PdfName.SUBTYPE, PdfName.WATERMARK); annot.put(PdfName.AP, ap); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); annot = new PdfAnnotation(writer, new Rectangle(220, 220, 240, 240)); annot.put(PdfName.SUBTYPE, PdfName.FILEATTACHMENT); annot.put(PdfName.AP, ap); annot.put(PdfName.F, new PdfNumber(PdfAnnotation.FLAGS_PRINT)); canvas.addAnnotation(annot); boolean exceptionThrown = false; try { document.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } Assert.assertFalse(exceptionThrown); } @Test public void colorCheckTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2ColorCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); PdfDictionary sec = new PdfDictionary(); sec.put(PdfName.GAMMA, new PdfArray(new float[]{2.2f,2.2f,2.2f})); sec.put(PdfName.MATRIX, new PdfArray(new float[]{0.4124f,0.2126f,0.0193f,0.3576f,0.7152f,0.1192f,0.1805f,0.0722f,0.9505f})); sec.put(PdfName.WHITEPOINT, new PdfArray(new float[]{0.9505f,1f,1.089f})); PdfArray arr = new PdfArray(PdfName.CALRGB); arr.add(sec); writer.setDefaultColorspace(PdfName.DEFAULTCMYK, writer.addToBody(arr).getIndirectReference()); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); font.setColor(GrayColor.GRAYBLACK); document.add(new Paragraph("Hello World", font)); font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); font.setColor(new CMYKColor(0, 100, 0, 0)); document.add(new Paragraph("Hello World", font)); font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); font.setColor(new BaseColor(0, 255, 0)); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfContentByte canvas = writer.getDirectContent(); canvas.setColorFill(new CMYKColor(0.1f, 0.1f, 0.1f, 0.1f)); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.fill(); document.close(); } @Test public void colorCheckTest2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2ColorCheckTest2.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12, Font.NORMAL, BaseColor.RED); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfContentByte canvas = writer.getDirectContent(); boolean exceptionThrown = false; canvas.setColorFill(new CMYKColor(0.1f, 0.1f, 0.1f, 0.1f)); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.fill(); try { document.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformanceException should be thrown."); } @Test public void colorCheckTest3() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2ColorCheckTest3.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); PdfDictionary sec = new PdfDictionary(); sec.put(PdfName.GAMMA, new PdfArray(new float[]{2.2f,2.2f,2.2f})); sec.put(PdfName.MATRIX, new PdfArray(new float[]{0.4124f,0.2126f,0.0193f,0.3576f,0.7152f,0.1192f,0.1805f,0.0722f,0.9505f})); sec.put(PdfName.WHITEPOINT, new PdfArray(new float[]{0.9505f,1f,1.089f})); PdfArray arr = new PdfArray(PdfName.CALRGB); arr.add(sec); writer.setDefaultColorspace(PdfName.DEFAULTGRAY, writer.addToBody(arr).getIndirectReference()); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); document.close(); PdfReader reader = new PdfReader(outputDir + "pdfa2ColorCheckTest3.pdf"); PdfAStamper stamper = new PdfAStamper(reader, new FileOutputStream(outputDir + "pdfa2ColorCheckTest3_updating_failed.pdf"), PdfAConformanceLevel.PDF_A_2B); boolean exceptionThrown = false; try { font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); font.setColor(BaseColor.RED); PdfContentByte canvas = stamper.getOverContent(1); canvas.setFontAndSize(font.getBaseFont(), 12); canvas.setColorFill(BaseColor.RED); ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, new Paragraph("Hello World", font), 36, 775, 0); stamper.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } reader.close(); if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); reader = new PdfReader(outputDir + "pdfa2ColorCheckTest3.pdf"); stamper = new PdfAStamper(reader, new FileOutputStream(outputDir + "pdfa2ColorCheckTest3_updating_ok.pdf"), PdfAConformanceLevel.PDF_A_2B); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); stamper.getWriter().setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); font.setColor(BaseColor.RED); PdfContentByte canvas = stamper.getOverContent(1); canvas.setFontAndSize(font.getBaseFont(), 12); canvas.setColorFill(BaseColor.RED); ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, new Paragraph("Hello World", font), 36, 775, 0); stamper.close(); reader.close(); } @Test public void colorCheckTest4() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2ColorCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); document.close(); PdfReader reader = new PdfReader(outputDir + "pdfa2ColorCheckTest4.pdf"); PdfAStamper stamper = new PdfAStamper(reader, new FileOutputStream(outputDir + "pdfa2ColorCheckTest4_updating_failed.pdf"), PdfAConformanceLevel.PDF_A_2B); boolean exceptionThrown = false; try { icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); stamper.getWriter().setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); font.setColor(BaseColor.RED); PdfContentByte canvas = stamper.getOverContent(1); canvas.setFontAndSize(font.getBaseFont(), 12); canvas.setColorFill(BaseColor.RED); ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, new Paragraph("Hello World", font), 36, 775, 760); stamper.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } reader.close(); if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); } @Test public void colorCheckTest5() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2ColorCheckTest5.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); boolean exceptionThrown = false; try { Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); PdfContentByte canvas = writer.getDirectContent(); canvas.setColorFill(BaseColor.LIGHT_GRAY); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.lineTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.fill(); canvas.setFontAndSize(font.getBaseFont(), 20); canvas.setColorStroke(new CMYKColor(0, 0, 0, 1f)); canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_STROKE); canvas.saveState(); canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_CLIP); canvas.restoreState(); canvas.beginText(); canvas.showTextAligned(Element.ALIGN_LEFT, "Hello World", 36, 770, 0); canvas.endText(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); } @Test public void colorCheckTest6() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2ColorCheckTest6.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); PdfContentByte canvas = writer.getDirectContent(); canvas.setColorFill(BaseColor.LIGHT_GRAY); canvas.moveTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getBottom()); canvas.lineTo(writer.getPageSize().getRight(), writer.getPageSize().getTop()); canvas.lineTo(writer.getPageSize().getLeft(), writer.getPageSize().getBottom()); canvas.fill(); canvas.setFontAndSize(font.getBaseFont(), 20); canvas.setColorStroke(new CMYKColor(0, 0, 0, 1f)); canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_INVISIBLE); canvas.beginText(); canvas.showTextAligned(Element.ALIGN_LEFT, "Hello World", 36, 770, 0); canvas.endText(); canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL); canvas.beginText(); canvas.showTextAligned(Element.ALIGN_LEFT, "Hello World", 36, 750, 0); canvas.endText(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } @Test public void fontCheckTest1() throws IOException { boolean exceptionThrown = false; try { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "pdfa2FontCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_2A); writer.createXmpMetadata(); writer.setTagged(); document.open(); document.addLanguage("en-US"); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, false/*BaseFont.EMBEDDED*/, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } catch (DocumentException docExc) { exceptionThrown = true; } catch (PdfAConformanceException exc) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); } /** * Prints a square and fills half of it with a gray rectangle. * * @param x * @param y * @param cb * @throws Exception */ private void pictureBackdrop(float x, float y, PdfContentByte cb) { cb.setColorStroke(BaseColor.BLACK); cb.setColorFill(BaseColor.LIGHT_GRAY); cb.rectangle(x, y, 100, 200); cb.fill(); cb.setLineWidth(2); cb.rectangle(x, y, 200, 200); cb.stroke(); } /** * Prints 3 circles in different colors that intersect with eachother. * * @param x * @param y * @param cb * @throws Exception */ private void pictureCircles(float x, float y, PdfContentByte cb) { cb.setColorFill(BaseColor.RED); cb.circle(x + 70, y + 70, 50); cb.fill(); cb.setColorFill(BaseColor.YELLOW); cb.circle(x + 100, y + 130, 50); cb.fill(); cb.setColorFill(BaseColor.BLUE); cb.circle(x + 130, y + 70, 50); cb.fill(); } /** * Prints a square and fills half of it with a gray rectangle. * * @param x * @param y * @param cb * @throws Exception */ private void pictureBackdrop(float x, float y, PdfContentByte cb, PdfWriter writer) { PdfShading axial = PdfShading.simpleAxial(writer, x, y, x + 200, y, BaseColor.YELLOW, BaseColor.RED); PdfShadingPattern axialPattern = new PdfShadingPattern(axial); cb.setShadingFill(axialPattern); cb.setColorStroke(BaseColor.BLACK); cb.setLineWidth(2); cb.rectangle(x, y, 200, 200); cb.fillStroke(); } /** * Prints 3 circles in different colors that intersect with eachother. * * @param x * @param y * @param cb * @throws Exception */ private void pictureCircles(float x, float y, PdfContentByte cb, PdfWriter writer) { PdfGState gs = new PdfGState(); gs.setBlendMode(PdfGState.BM_MULTIPLY); gs.setFillOpacity(1f); cb.setGState(gs); cb.setColorFill(BaseColor.LIGHT_GRAY); cb.circle(x + 75, y + 75, 70); cb.fill(); cb.circle(x + 75, y + 125, 70); cb.fill(); cb.circle(x + 125, y + 75, 70); cb.fill(); cb.circle(x + 125, y + 125, 70); cb.fill(); } @Test public void fileSpecCheckTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); byte[] somePdf = new byte[25]; writer.addFileAttachment("some pdf file", somePdf, "foo.pdf", "foo.pdf", PdfAWriter.MimeTypePdf, AFRelationshipValue.Data); document.close(); } @Test public void cidFontCheckTest1() throws DocumentException, IOException, InterruptedException { String outPdf = outputDir + "cidFontCheckTest1.pdf"; String resourceDir = "./src/test/resources/com/itextpdf/text/pdf/"; Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outPdf), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont(resourceDir + "FreeMonoBold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream(resourceDir + "sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); Assert.assertNull(new CompareTool().compareByContent(outPdf, resourceDir + "cidset/cmp_cidFontCheckTest1.pdf", outputDir, "diff_")); } @Test public void cidFontCheckTest2() throws DocumentException, IOException, InterruptedException { String outPdf = outputDir + "cidFontCheckTest2.pdf"; String resourceDir = "./src/test/resources/com/itextpdf/text/pdf/"; Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outPdf), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont(resourceDir + "Puritan2.otf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream(resourceDir + "sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); Assert.assertNull(new CompareTool().compareByContent(outPdf, resourceDir + "cidset/cmp_cidFontCheckTest2.pdf", outputDir, "diff_")); } @Test public void cidFontCheckTest3() throws DocumentException, IOException, InterruptedException { String outPdf = outputDir + "cidFontCheckTest3.pdf"; String resourceDir = "./src/test/resources/com/itextpdf/text/pdf/"; Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outPdf), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont(resourceDir + "NotoSansCJKjp-Bold.otf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream(resourceDir + "sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); Assert.assertNull(new CompareTool().compareByContent(outPdf, resourceDir + "cidset/cmp_cidFontCheckTest3.pdf", outputDir, "diff_")); } @Test public void fileSpecCheckTest2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest2.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); FileInputStream is = new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/pdfa.pdf"); ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } writer.addPdfAttachment("some pdf file", os.toByteArray(), "foo.pdf", "foo.pdf"); document.close(); } @Test public void fileSpecCheckTest3() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest3.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); ByteArrayOutputStream txt = new ByteArrayOutputStream(); PrintStream out = new PrintStream(txt); out.print("<foo><foo2>Hello world</foo2></foo>"); out.close(); boolean exceptionThrown = false; try { writer.addFileAttachment("foo file", txt.toByteArray(), "foo.xml", "foo.xml", "application/xml", AFRelationshipValue.Source); } catch (PdfAConformanceException e) { if (e.getObject() != null && e.getLocalizedMessage().equals("Embedded file shall contain correct pdf mime type.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException with correct message should be thrown."); } @Test public void textFieldTest() throws IOException, DocumentException { Document d = new Document(); PdfWriter w = PdfAWriter.getInstance(d, new FileOutputStream(outputDir + "textField.pdf"), PdfAConformanceLevel.PDF_A_2B); w.createXmpMetadata(); d.open(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); w.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); TextField text = new TextField(w, new Rectangle(50,700,150,750), "text1"); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); text.setFont(font.getBaseFont()); text.setText("test"); PdfFormField field = text.getTextField(); w.addAnnotation(field); d.close(); } }